#pragma once

namespace MiniHttpServer
{
	public ref class IHttpRequest abstract
	{
	public:
		virtual ~IHttpRequest() {};
		virtual property System::String^ RawUri { System::String^ get() = 0; };
		virtual property System::Uri^ Uri { System::Uri^ get() = 0; };
		virtual property System::String^ Method { System::String^ get() = 0; };
		virtual property System::Collections::Specialized::NameValueCollection^ Headers { System::Collections::Specialized::NameValueCollection^ get() = 0; };
		virtual property System::String^ ContentType { System::String^ get() = 0; };
		virtual property __int64 ContentLength { __int64 get() = 0; };
		virtual property System::String^ UserAgent { System::String^ get() = 0;	};
		virtual property bool KeepAlive { bool get() = 0; };
		virtual property bool HasBody { bool get() = 0; };

		// named "GetBody" for consistency with the response interface
		virtual System::IO::Stream^ GetBody() = 0;
	};
};